package com.yihu.cms.util;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



/**
 * 
 * 重写spring日期转换器，自定义日期转换器
 */

public class MyCustomDateEditor extends PropertyEditorSupport {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

	/**
	 * 
	 * Parse the Date from the given text, using the specified DateFormat.
	 */

	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		if (StringUtils.isBlank(text)) {
			// Treat empty String as null value.
			setValue(null);
		} else {
			try {
				setValue(dateAdapter(text));
			}catch (IllegalArgumentException ex) {
				ex.printStackTrace();
				logger.error("出错日志：" + ex.getMessage());
			}
		}
	}

	/**
	 * 
	 * Format the Date as String, using the specified DateFormat.
	 */

	@Override
	public String getAsText() {
		Date value = (Date) getValue();
		SimpleDateFormat dateFormat = new SimpleDateFormat(
				"yyyy-MM-dd HH:mm:ss");
		return (value != null ? dateFormat.format(value) : "");
	}

	/**
	 * 
	 * 字符串转日期适配方法
	 * 
	 * @param dateStr
	 *            日期字符串
	 * 
	 * @throws FrameworkException
	 */

	@SuppressWarnings("deprecation")
	public static Date dateAdapter(String dateStr) {
	    if(StringUtils.isBlank(dateStr)){
	    	return null;
	    }
	    Date date=null;
	    //判断是不是日期字符串，如Wed May 28 08:00:00 CST 2014
	    if(dateStr.contains("CST")){
	    	return new Date(dateStr);
	    }
	    
    	dateStr = dateStr.replace("年", "-").replace("月", "-").replace("日", "").replaceAll("/", "-").replaceAll("\\.", "-").trim();
        String fm="";
        //确定日期格式
        if(Pattern.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2}.*").matcher(dateStr).matches()){
        	fm = "yyyy-MM-dd";
        }else if(Pattern.compile("^[0-9]{4}-[0-9]{1}-[0-9]+.*||^[0-9]{4}-[0-9]+-[0-9]{1}.*").matcher(dateStr).matches()){
        	fm = "yyyy-M-d";
        }else if(Pattern.compile("^[0-9]{2}-[0-9]{2}-[0-9]{2}.*").matcher(dateStr).matches()){
        	fm = "yy-MM-dd";
        }else if(Pattern.compile("^[0-9]{2}-[0-9]{1}-[0-9]+.*||^[0-9]{2}-[0-9]+-[0-9]{1}.*").matcher(dateStr).matches()){
        	fm = "yy-M-d";
        }
        //确定时间格式
        if(Pattern.compile(".*[ ][0-9]{2}").matcher(dateStr).matches()){
        	fm+= " HH";
        }else if(Pattern.compile(".*[ ][0-9]{2}:[0-9]{2}").matcher(dateStr).matches()){
        	fm+= " HH:mm";
        }else if(Pattern.compile(".*[ ][0-9]{2}:[0-9]{2}:[0-9]{2}").matcher(dateStr).matches()){
        	fm+= " HH:mm:ss";
        }else if(Pattern.compile(".*[ ][0-9]{2}:[0-9]{2}:[0-9]{2}:[0-9]{0,3}").matcher(dateStr).matches()){
        	fm+= " HH:mm:ss:sss";
        }
        if(!"".equals(fm)){
			try {
				date = new SimpleDateFormat(fm).parse(dateStr);
			} catch (ParseException e) {
				throw new IllegalArgumentException("参数字符串“"+dateStr+"”无法被转换为日期格式！");
			}
        }
	    return date;
    }

}

